package Leetcode.树;


import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
 * @Author: kirito
 * @Date: 2024/3/2 17:36
 * @Description:
 * 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。
 */

public class 二叉树的层平均值 {
    public List<Double> averageOfLevels(TreeNode root) {
        List<Double> res = new ArrayList<>();
        Queue<TreeNode> que = new LinkedList<>();
        que.add(root);
        while (!que.isEmpty()) {
            double sum = 0;
            int size = que.size();
            for (int i = 0; i < size; i++) {
                TreeNode poll = que.poll();
                sum += poll.val;
                if (poll.left != null) {
                    que.add(poll.left); // 如果左子节点存在，则将其添加到队列中
                }
                if (poll.right != null) {
                    que.add(poll.right); // 如果右子节点存在，则将其添加到队列中
                }
            }
            sum /= size;
            res.add(sum);
        }
        return res;

    }
}
